home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / m2gem106.lzh / CRYSTAL1.06 / SRC / TOOLBOX / PSTORAGE.MOD < prev    next >
Encoding:
Modula Implementation  |  1993-11-07  |  3.5 KB  |  169 lines

  1. IMPLEMENTATION MODULE pSTORAGE;
  2.  
  3. (*
  4. A portable Storage Module.
  5.  
  6. "(*Addr:= NIL;*)" means: "Addr:= NIL; isn't necessary"
  7.  
  8. UK __DATE__ __TIME__
  9. *)
  10.  
  11. (*IMP_SWITCHES*)
  12.  
  13. FROM SYSTEM IMPORT ADDRESS;
  14.  
  15. #ifdef LPRM2
  16. IMPORT Heap;
  17. #elif (defined FTLM2)
  18.  
  19. #else
  20. IMPORT Storage;
  21. #endif
  22.  
  23. #if (defined ANAM2) || (defined XAM2)
  24. PROCEDURE ALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  25.  
  26. VAR Success: BOOLEAN;
  27.  
  28. BEGIN
  29.   Storage.CondAllocate(Addr,Size,Success);
  30.   IF NOT Success THEN
  31.     Addr:= NIL;
  32.   END;
  33. END ALLOCATE;
  34.  
  35. PROCEDURE DEALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  36. BEGIN
  37.   Storage.DEALLOCATE(Addr,Size);
  38. END DEALLOCATE;
  39.  
  40. #elif (defined TDIM2)
  41. PROCEDURE ALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  42. BEGIN
  43.   Storage.ALLOCATE(Addr,LONGCARD(Size));
  44. END ALLOCATE;
  45.  
  46. PROCEDURE DEALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  47. BEGIN
  48.   Storage.DEALLOCATE(Addr,LONGCARD(Size));
  49. (*Addr:= NIL;*)
  50. END DEALLOCATE;
  51.  
  52. #elif (defined FSTM2)
  53. PROCEDURE ALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  54. BEGIN
  55.   Storage.ALLOCATE(Addr,Size);
  56. END ALLOCATE;
  57.  
  58. PROCEDURE DEALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  59. BEGIN
  60.   Storage.DEALLOCATE(Addr,Size);
  61. (*Addr:= NIL;*)
  62. END DEALLOCATE;
  63.  
  64. #elif (defined MM2)
  65. PROCEDURE ALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  66. BEGIN
  67.   Storage.ALLOCATE(Addr,Size);
  68. END ALLOCATE;
  69.  
  70. PROCEDURE DEALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  71. BEGIN
  72.   Storage.DEALLOCATE(Addr,Size);
  73. (*Addr:= NIL;*)
  74. END DEALLOCATE;
  75.  
  76. #elif (defined LPRM2)
  77. PROCEDURE ALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  78. BEGIN
  79.   Addr:= NIL;
  80.   Heap.Allocate(Addr,Size);
  81. END ALLOCATE;
  82.  
  83. PROCEDURE DEALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  84. BEGIN
  85.   Heap.Deallocate(Addr,Size);
  86.   Addr:= NIL;
  87. END DEALLOCATE;
  88.  
  89. #elif (defined SPCM2)
  90. PROCEDURE ALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  91. BEGIN
  92.   Storage.ALLOCATE(Addr,Size);
  93. END ALLOCATE;
  94.  
  95. PROCEDURE DEALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  96. BEGIN
  97.   Storage.DEALLOCATE(Addr); (* ! *)
  98. END DEALLOCATE;
  99.  
  100. #elif (defined HM2) || (defined XHM2)
  101. PROCEDURE ALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  102. BEGIN
  103.   Storage.ALLOCATE(Addr,Size);
  104. END ALLOCATE;
  105.  
  106. PROCEDURE DEALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  107. BEGIN
  108.   Storage.DEALLOCATE(Addr,Size);
  109. END DEALLOCATE;
  110.  
  111. #elif (defined LM2)
  112. PROCEDURE ALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  113. BEGIN
  114.   IF NOT Storage.Available(Size) THEN
  115.     Addr:= NIL;
  116.   ELSE
  117.     Storage.ALLOCATE(Addr,Size);
  118.   END;
  119. END ALLOCATE;
  120.  
  121. PROCEDURE DEALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  122. BEGIN
  123.   Storage.DEALLOCATE(Addr,Size);
  124. (*Addr:= NIL;*)
  125. END DEALLOCATE;
  126.  
  127. #elif (defined TSM2_1)
  128. PROCEDURE ALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  129. BEGIN
  130.   IF Storage.HeapAvail(Storage.MainHeap) <= VAL(CARDINAL,Size DIV 16) THEN
  131.     Addr:= NIL;
  132.   ELSE
  133.     Storage.HeapAllocate(Storage.MainHeap,Addr,VAL(CARDINAL,Size DIV 16));
  134.   END;
  135. END ALLOCATE;
  136.  
  137. PROCEDURE DEALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  138. BEGIN
  139.   Storage.HeapDeallocate(Storage.MainHeap,Addr,VAL(CARDINAL,Size DIV 16));
  140. (*Addr:= NIL;*)
  141. END DEALLOCATE;
  142.  
  143. #elif (defined TSM2_2)
  144. PROCEDURE ALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  145. BEGIN
  146.   IF NOT Storage.FarAvailable(Size) THEN
  147.     Addr:= NIL;
  148.   ELSE
  149.     Storage.FarALLOCATE(Addr,Size);
  150.   END;
  151. END ALLOCATE;
  152.  
  153. PROCEDURE DEALLOCATE(VAR Addr: ADDRESS; Size: SIZETYPE);
  154. BEGIN
  155.   Storage.FarDEALLOCATE(Addr,Size);
  156. (*Addr:= NIL;*)
  157. END DEALLOCATE;
  158. #endif
  159.  
  160. #ifdef TDIM2
  161. CONST HEAPSIZE = 10000H; (* 64kB *)
  162.  
  163. BEGIN
  164.  IF NOT Storage.CreateHeap(HEAPSIZE,TRUE) THEN
  165.    HALT;
  166.  END;
  167. #endif
  168. END pSTORAGE.
  169.